/*================================================================
*   Copyright (C) 2024 baichao All rights reserved.
*
*   文件名称：id.c
*   创 建 者：baichao
*   创建日期：2024年02月27日
*   描    述：
*
================================================================*/

/*
 * UID         PID   PPID    LWP  C NLWP STIME TTY          TIME CMD
 * baichao    8794   2724   8794  0    5 05:56 pts/0    00:00:00 ./threadId
 * baichao    8794   2724   8795 99    5 05:56 pts/0    00:02:27 ./threadId
 * baichao    8794   2724   8796 99    5 05:56 pts/0    00:02:27 ./threadId
 * baichao    8794   2724   8797 99    5 05:56 pts/0    00:02:27 ./threadId
 * baichao    8794   2724   8798 99    5 05:56 pts/0    00:02:27 ./threadId
 *
 * PID: 8794,即进程ID
 * PPID：父进程ID，表示创建该进程的进程的ID。
 * LWP：轻量级进程（LightweightProcess），在这里实际上是线程ID，用于唯一标识进程中的一个线程。线程组内存在一个线程ID等于进程ID，而该线程即为线程组的主线程。
 * C：CPU利用率，表示该线程当前占用的CPU使用率。
 * NLWP：5,表示进程内有五个线程。其中8794和进程Id一样，表示当前进程中的主线程。
 * STIME：启动时间，表示进程或线程的启动时间。
 * TIME：CPU时间，表示该进程或线程总共占用的CPU时间。
 * 
 * 
 */

#include <pthread.h>
#include <stdio.h>
#include <syscall.h>

void *ThreadFunc(void *arg) {
  int i = 0;
  while (1) {
    if (i == 0) {
      printf("curr thread id:%d\n", syscall(SYS_gettid));
      printf("curr thread self:%x\n", pthread_self());
    }
    i = 1;
  }
}

int main() {
  pthread_t pthreadIds[4];
  for (int i = 0; i < 4; i++) {
    if (pthread_create(&pthreadIds[i], NULL, ThreadFunc, NULL) != 0) {
      printf(stderr, "pthread_create failed\n");
    }
  }

  for (int i = 0; i < 4; i++) {
    pthread_join(pthreadIds[i], NULL);
  }
  return 0;
}
